/**
 * 不同状态码处理
 * 1000 成功
 * 9000 业务异常
 * 9001 未登录
 * 9002 token过期
 * 9003 没有访问权限
 * 9004 刷新token过期
 * 9005 未绑定用户
 * 9006 不支持grant_type
 * 9007 用户为允许授权
 * 9999 西宫异常
 */
import tools from '@/libs/tools'
import store from '@/store'
import api from '@/api/index.js'
import {
  getToken,
} from '@/libs/util'

/**
 * 处理请求返回数据的code非0000的情况
 * @param  {object} data      请求返回的数据
 * @param  {object} cb        回调函数
 * @param  {object} params    回调函数的参数
 */

function handleResponseErr(data, cb, params) {

  const OK = '1000'; //成功
  const ERROR = '9000'; //业务异常
  const UN_LOGIN = '9001'; //未登录
  const EXEED_TOKEN = '9002'; //token过期
  const FORBIDDEN = '9003'; //没有访问权限
  const EXCEED_REFRESH_TOKEN = '9004'; //刷新token过期
  const NO_BIND = '9005'; //未绑定用户
  const UN_GRANT_TYPE = '9006'; //不支持grant_type
  const UN_ALLOWED_AUTHORIZATION = '9007'; //用户未允许授权
  const SYSTEM_ERROR = '9999'; //系统异常

  if (data.code === UN_LOGIN) { // 未登录或登录超时
    this.$Message["error"]({
      content: '登录过期，请重新登录',
      background: true,
      duration: this.$constance.messageDuration,
      closable: true
    })
    tools.logout(this) // 退出登录
  } else if (data.code === EXEED_TOKEN) { 
    let token = JSON.parse(getToken());
    let loginParams = new FormData()
    loginParams.append('grant_type', 'refresh_token')
    loginParams.append('refresh_token', token.refresh_token)
    api.requestLogin(loginParams).then(data => {
      if (data.code === OK) {
        store.commit('setToken', data.data)
        if (cb) {
          cb(params)
        }
      } else {
        this.$Message["error"]({
          content: '登录过期，请重新登录',
          background: true,
          duration: this.$constance.messageDuration,
          closable: true // 是否显示关闭按钮
        })
        tools.logout(this) // 退出登录
      }
    }).catch(err => {
      this.$Message["error"]({
        content: '登录过期，请重新登录',
        background: true,
        duration: this.$constance.messageDuration,
        closable: true // 是否显示关闭按钮
      })
      tools.logout(this) // 退出登录
    })
  } else if (data.code === EXCEED_REFRESH_TOKEN) { // refreshToken过期
    this.$Message["error"]({
      content: '登录过期，请重新登录',
      background: true,
      duration: this.$constance.messageDuration,
      closable: true // 是否显示关闭按钮
    })
    tools.logout(this) // 退出登录
  } else if (data.code === ERROR) { // 业务异常
    this.$Message["error"]({
      background: true,
      duration: this.$constance.messageDuration,
      content: data.message
    });
    cb && cb(data.message)
  } else {
    this.$Message["error"]({
      content: data.message || this.$constance.operationMsg.REQUEST_ERROR,
      duration: this.$constance.messageDuration,
      background: true,
      closable: true // 是否显示关闭按钮
    })
    cb && cb(data.message)
  }
}

const errHandler = {
  handleResponseErr // 返回数据的错误处理
}

export default errHandler